package com.tobe.spring_demo.mybatis;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.tobe.spring_demo.mybatis.mapper.MyInterface;

/**
 * @author yangqifan 2015年9月10日
 * 
 */
public class MybatisSpringHowWorkTest {
	
	public static void main(String[] args) {
		//appcontext, spring容器上下文,解析xml配置创建bean容器, 
		ApplicationContext context = new ClassPathXmlApplicationContext("mybatis-spring-work-test.xml");
		
		/**
		 * 使用mybaits于spring集成,核心就是SqlSessionFactoryBean和MapperScannerConfigurer
		 * 
		 * 1.自定义classDenifitionScanner,注意过滤器,默认spring加载@Component注解和非抽象类到容器中
		 * 2.为mapper interface设置beanClass, 并设置setAutowireMode为byType,如果beanclass中有set*(T t)方法,spring容器会自动调用该方法注入属性
		 * ,也有可能使用该set方法来完成一些初始化工作
		 * 
		 * 以后可以参考mybatis如何使用spring, 基于spring实现某些高级特性
		 */
		
		
		/**
		 * MyInterface beandefinition的beanclass 为B , 所以通过可以通过B.class和myInterface从容器内获取对象,
		 * 
		 * 当多个接口都是使用B作为beanclass, context.getBean(B.class)会报错,因为多个bean definition的类都为B, 如果B实现FactoryBean,可以每次都创建一个B
		 */
//		B bean = context.getBean(B.class); 
		MyMapperFactoryBean m = (MyMapperFactoryBean) context.getBean("myInterface");
		
		System.out.println("");
	}

}

